import sys,os
import time

def clear_traces(): # 清除一行
    sys.__stdout__.write('\033[2K\r')


def hide_cursor(): # 隐藏光标
    sys.__stdout__.write('\033[?25l')


def show_cursor(): # 显示光标
    sys.__stdout__.write('\033[?25h')


def go_up(n=20): # 光标向上移动 n 行
    up_command = '\033[{}A'.format(n)
    print(up_command)


def flush():
    sys.__stdout__.flush()


'''
​表现​：\033[2K 被原样输出（显示为 ESC[2K 或 [2K）。
​原因​：
旧版 Windows 终端（如 cmd.exe）默认禁用 ANSI 转义码。
'''
#os.system('')  # 启用 ANSI 转义码（仅 Windows 需要）
'''
for i in range(100):
    clear_traces()  # 清除当前行
    print(f"Progress: {i}%", end='', flush=True)
    time.sleep(0.05)
for i in range(100,0,-1):
    print("|"*i,end="",flush=True)   
    time.sleep(0.2) 
    clear_traces()  # 清除当前行
'''
#print("\033[48;5;57m  \033[0m") #如果 Unicode 方块显示异常，可以用 ​ANSI 背景色​ 模拟实心块：
#print("\u25A0") #直接使用 Unicode 转义输出一个实心方块


def showLs(ls,col,style):
    images=[]
    for i in range(len(ls)):
        images.append([])
    for r in range(20):
        for i in range(len(ls)):
            if ls[i]>20-r-1:
                images[i].append("\u2588")
            else:
                images[i].append(" ")
    for i in range(len(ls)):#增加数字显示
        images[i].append(ls[i])  
    for i in range(len(ls)):#增加箭头指示 
        if col==len(ls):
            images[i].append(" ")
        else:
            if i==col or i==col-1:
                images[i].append("\u21E7")
            else:
                images[i].append(" ")
    os.system('cls' if os.name == 'nt' else 'clear')
    for r in range(22):
        for image in images:
            print(str(image[r]).ljust(4),end="",flush=True)
        print(flush=True)
    if style=="1":
        time.sleep(0.5)
    else:
        input("按任意键继续……")

ls=[20,18,7,16,15,10,8,6,4,2]
print("请选择演示方式：")
print("1.自动演示")
print("2.逐步演示")
style=input("请输入序号选择演示方式：")
for i in range(len(ls)-1):#冒泡排序
    for j in range(1,len(ls)-i):
        showLs(ls,j,style)
        if ls[j-1]>ls[j]:
            ls[j-1],ls[j]=ls[j],ls[j-1]
showLs(ls,len(ls),style)